GdiPlusColor.h revision ee451cb395940862dad63c85adfe8f2fd55e864c
1/**************************************************************************\ 2* 3* Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. 4* 5* Module Name: 6* 7* GdiplusColor.h 8* 9* Abstract: 10* 11* Represents a GDI+ color. 12* 13\**************************************************************************/ 14 15#ifndef _GDIPLUSCOLOR_H 16#define _GDIPLUSCOLOR_H 17 18//---------------------------------------------------------------------------- 19// Color mode 20//---------------------------------------------------------------------------- 21 22enum ColorMode 23{ 24 ColorModeARGB32 = 0, 25 ColorModeARGB64 = 1 26}; 27 28//---------------------------------------------------------------------------- 29// Color Channel flags 30//---------------------------------------------------------------------------- 31 32enum ColorChannelFlags 33{ 34 ColorChannelFlagsC = 0, 35 ColorChannelFlagsM, 36 ColorChannelFlagsY, 37 ColorChannelFlagsK, 38 ColorChannelFlagsLast 39}; 40 41//---------------------------------------------------------------------------- 42// Color 43//---------------------------------------------------------------------------- 44 45class Color 46{ 47public: 48 49 Color() 50 { 51 Argb = (ARGB)Color::Black; 52 } 53 54 // Construct an opaque Color object with 55 // the specified R, G, B values. 56 57 Color(IN BYTE r, 58 IN BYTE g, 59 IN BYTE b) 60 { 61 Argb = MakeARGB(255, r, g, b); 62 } 63 64 // Construct a Color object with 65 // the specified A, R, G, B values. 66 // 67 // NOTE: R, G, B color values are not premultiplied. 68 69 Color(IN BYTE a, 70 IN BYTE r, 71 IN BYTE g, 72 IN BYTE b) 73 { 74 Argb = MakeARGB(a, r, g, b); 75 } 76 77 // Construct a Color object with 78 // the specified ARGB values. 79 // 80 // NOTE: R, G, B color components are not premultiplied. 81 82 Color(IN ARGB argb) 83 { 84 Argb = argb; 85 } 86 87 // Extract A, R, G, B components 88 89 BYTE GetAlpha() const 90 { 91 return (BYTE) (Argb >> AlphaShift); 92 } 93 94 BYTE GetA() const 95 { 96 return GetAlpha(); 97 } 98 99 BYTE GetRed() const 100 { 101 return (BYTE) (Argb >> RedShift); 102 } 103 104 BYTE GetR() const 105 { 106 return GetRed(); 107 } 108 109 BYTE GetGreen() const 110 { 111 return (BYTE) (Argb >> GreenShift); 112 } 113 114 BYTE GetG() const 115 { 116 return GetGreen(); 117 } 118 119 BYTE GetBlue() const 120 { 121 return (BYTE) (Argb >> BlueShift); 122 } 123 124 BYTE GetB() const 125 { 126 return GetBlue(); 127 } 128 129 // Retrieve ARGB values 130 131 ARGB GetValue() const 132 { 133 return Argb; 134 } 135 136 VOID SetValue(IN ARGB argb) 137 { 138 Argb = argb; 139 } 140 141 VOID SetFromCOLORREF(IN COLORREF rgb) 142 { 143 Argb = MakeARGB(255, GetRValue(rgb), GetGValue(rgb), GetBValue(rgb)); 144 } 145 146 COLORREF ToCOLORREF() const 147 { 148 return RGB(GetRed(), GetGreen(), GetBlue()); 149 } 150 151public: 152 153 // Standard color constants 154 enum 155 { 156 Black = 0xff000000, 157 Silver = 0xffc0c0c0, 158 Gray = 0xff808080, 159 White = 0xffffffff, 160 Maroon = 0xff800000, 161 Red = 0xffff0000, 162 Purple = 0xff800080, 163 Fuchsia = 0xffff00ff, 164 Green = 0xff008000, 165 Lime = 0xff00ff00, 166 Olive = 0xff808000, 167 Yellow = 0xffffff00, 168 Navy = 0xff000080, 169 Blue = 0xff0000ff, 170 Teal = 0xff008080, 171 Aqua = 0xff00ffff 172 }; 173 174 // Shift count and bit mask for A, R, G, B components 175 enum 176 { 177 AlphaShift = 24, 178 RedShift = 16, 179 GreenShift = 8, 180 BlueShift = 0 181 }; 182 183 enum 184 { 185 AlphaMask = 0xff000000, 186 RedMask = 0x00ff0000, 187 GreenMask = 0x0000ff00, 188 BlueMask = 0x000000ff 189 }; 190 191 // Assemble A, R, G, B values into a 32-bit integer 192 static ARGB MakeARGB(IN BYTE a, 193 IN BYTE r, 194 IN BYTE g, 195 IN BYTE b) 196 { 197 return (((ARGB) (b) << BlueShift) | 198 ((ARGB) (g) << GreenShift) | 199 ((ARGB) (r) << RedShift) | 200 ((ARGB) (a) << AlphaShift)); 201 } 202 203protected: 204 205 ARGB Argb; 206}; 207 208#endif 209 210